package com.shujia.day19.tcpdemo3;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

/*
    1:建立客户端的Socket服务,并明确要连接的服务器。
    2:如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket流,Socket流中既有读取流,也有写入流.
    3:通过Socket对象的方法,可以获取这两个流
    4:通过流的对象可以对数据进行传输
    5:如果传输数据完毕,关闭资源

 */
public class ClientDemo1 {
    public static void main(String[] args) throws Exception {
        // 1:建立客户端的Socket服务,并明确要连接的服务器。
        //Socket(String host, int port)
        //创建流套接字并将其连接到指定主机上的指定端口号。
        Socket socket = new Socket("192.168.22.15", 12345);
        Scanner sc = new Scanner(System.in);



        // 3:通过Socket对象的方法,可以获取这两个流
        //获取通道中的输出流，将数据发送给服务端
        OutputStream outputStream = socket.getOutputStream();
        //获取通道中的输入流
        InputStream inputStream = socket.getInputStream();

        // E:\\李刚的对象.jpg
        BufferedInputStream bis = null;
        while (true){
            try {
                System.out.print("请输入要上传文件的路径：");
                String address = sc.nextLine();
                bis = new BufferedInputStream(new FileInputStream(address));
                break;
            }catch (Exception e){
                System.out.println("路径不存在！重新输入！");
            }
        }
        if(bis!=null){
            byte[] bytes = new byte[2048];
            int length = 0;
            while ((length = bis.read(bytes))!=-1){
                // 4:通过流的对象可以对数据进行传输
                outputStream.write(bytes,0, length);
                outputStream.flush(); // 来自于通道中的类
            }
        }

        //关闭输出流，通知服务端读取结束
        socket.shutdownOutput();

        // 接收服务端的反馈
        byte[] bytes = new byte[1024];
        int length = inputStream.read(bytes);
        String s = new String(bytes, 0, length);
        System.out.println(s);


        // 5:如果传输数据完毕,关闭资源
//        outputStream.close();
        socket.close();

    }
}
